package org.example.mallweb.mallservice.service;

import org.example.mallcommon.result.ReturnResult;
import org.example.mallcommon.vio.ArticleVio;
import org.example.mallcommon.vio.ArticleVoPage;
import org.example.mallcommon.vo.ArticleDetailVo;
import org.example.mallcommon.vo.ArticleUserVio;
import org.example.mallcommon.vo.ArticleVo;

import java.io.IOException;
import java.util.List;

/**
 * @author 韩先楚
 * 文章服务接口
 */
public interface ArticleService {
    /**
     * 分页获取所有文章
     */
    ReturnResult<ArticleUserVio> getAllArticle(Integer page, Integer size, Long category);

    /**
     * 分页获取最新文章
     */
    ReturnResult<ArticleUserVio> getLatestArticle(Integer page, Integer size, Long category);

    /**
     * 分页获取点赞最多的文章
     */
    ReturnResult<ArticleUserVio> getMostPopularArticle(Integer page, Integer size, Long category);

    /**
     * 获取浏览量最高的文章
     */
    ReturnResult<ArticleUserVio> getMostViewedArticle(Integer page, Integer size, Long category);

    /**
     * 根据用户id获取用户发布和未发布的文章
     */
    ReturnResult<List<ArticleVo>> getMyArticle(Integer userId);

    //查找文章详情
    ReturnResult<ArticleDetailVo> selectArticleDetail(Long articleId, Integer userId);

    //分页获取推荐文章
    ReturnResult<ArticleUserVio> getRecommendArticle(Integer page, Integer size, Integer userId);

    //删除文章
    ReturnResult<String> deleteArticle(Long articleId) throws IOException;

    //修改文章
    void updateArticle(ArticleVio articleVio) throws IOException;



    //新增文章
    void addArticle(ArticleVio articleVio) throws IOException;

    //获取主页热点文章
    ReturnResult<ArticleUserVio> getHotArticle(Integer page, Integer size, Integer userId);
    //获取最新文章
    ReturnResult<ArticleUserVio> getNewArticle(Integer page, Integer size, Integer userId);

    //根据用户id分页获取用户发布的文章
    ReturnResult<ArticleVoPage> getArticleByUserId(Integer page, Integer size, Integer userId);

    //主页最新文章
    ReturnResult<ArticleUserVio> getFollowArticle(Integer page, Integer size, Integer userId);
}
